முன்புற மேம்பாட்டில் மீடியாஸ்ட்ரீம் ட்ராக்குகளின் சிக்கல்களை ஆராயுங்கள், உருவாக்கம், கையாளுதல், கட்டுப்பாடுகள் மற்றும் வலுவான மீடியா பயன்பாடுகளை உருவாக்க மேம்பட்ட நுட்பங்களை உள்ளடக்கியது.
முன்புற மீடியாஸ்ட்ரீம் ட்ராக்: மீடியா ட்ராக் நிர்வாகத்திற்கான ஒரு விரிவான வழிகாட்டி
MediaStreamTrack இடைமுகம் என்பது MediaStreamக்குள் இருக்கும் ஒரு ஊடக பாதையை குறிக்கிறது. இந்த பாதையில் ஆடியோ அல்லது வீடியோ இருக்கலாம். வலையில் வலுவான மற்றும் ஊடாடும் ஊடக பயன்பாடுகளை உருவாக்க இந்த தடங்களை எவ்வாறு நிர்வகிப்பது என்பதைப் புரிந்துகொள்வது முக்கியம். இந்த விரிவான வழிகாட்டி முன்புற வளர்ச்சியில் MediaStream தடங்களின் உருவாக்கம், கையாளுதல் மற்றும் நிர்வாகம் ஆகியவற்றின் மூலம் உங்களை வழிநடத்தும்.
மீடியாஸ்ட்ரீம் ட்ராக் என்றால் என்ன?
MediaStream என்பது மீடியா உள்ளடக்கத்தின் ஸ்ட்ரீம் ஆகும், இதில் பல MediaStreamTrack பொருள்கள் இருக்கலாம். ஒவ்வொரு தடமும் ஆடியோ அல்லது வீடியோவின் ஒரு மூலத்தைக் குறிக்கிறது. ஆடியோ அல்லது வீடியோ தரவின் ஒரு ஸ்ட்ரீமை வைத்திருக்கும் கொள்கலனாக இதைக் கருதுங்கள்.
முக்கிய பண்புகள் மற்றும் முறைகள்
kind: தடத்தின் வகையைக் குறிக்கும் ஒரு படிக்க மட்டும் சரம் ("audio"அல்லது"video").id: தடத்திற்கான தனித்துவமான அடையாளங்காட்டியைக் குறிக்கும் ஒரு படிக்க மட்டும் சரம்.label: தடத்திற்கான மனிதனால் படிக்கக்கூடிய லேபிளை வழங்கும் ஒரு படிக்க மட்டும் சரம்.enabled: ட்ராக் தற்போது இயக்கப்பட்டிருக்கிறதா என்பதைக் குறிக்கும் ஒரு பூலியன். இதைfalseஎன அமைப்பது தடத்தை நிறுத்தாமல் முடக்குகிறது அல்லது முடக்குகிறது.muted: சிஸ்டம் அளவிலான கட்டுப்பாடுகள் அல்லது பயனர் அமைப்புகள் காரணமாக ட்ராக் முடக்கப்பட்டுள்ளதா என்பதைக் குறிக்கும் ஒரு படிக்க மட்டும் பூலியன்.readyState: தடத்தின் தற்போதைய நிலையைக் குறிக்கும் ஒரு படிக்க மட்டும் சரம் ("live","ended").getSettings(): தடத்தின் தற்போதைய அமைப்புகளின் அகராதியைத் தருகிறது.getConstraints(): ட்ராக் உருவாக்கப்பட்டபோது பயன்படுத்தப்பட்ட கட்டுப்பாடுகளின் அகராதியைத் தருகிறது.applyConstraints(constraints): தடத்திற்கு புதிய கட்டுப்பாடுகளைப் பயன்படுத்த முயற்சிக்கிறது.clone(): அசல் பொருளின் நகலாக இருக்கும் ஒரு புதியMediaStreamTrackபொருளைத் தருகிறது.stop(): மீடியா தரவின் ஓட்டத்தை முடித்து, தடத்தை நிறுத்துகிறது.addEventListener():endedஅல்லதுmuteபோன்ற தடங்களில் நிகழ்வுகளைக் கேட்க உங்களை அனுமதிக்கிறது.
மீடியாஸ்ட்ரீம் தடங்களைப் பெறுதல்
MediaStreamTrack பொருள்களைப் பெறுவதற்கான முதன்மை வழி getUserMedia() API ஆகும். இந்த API பயனரிடம் அவர்களின் கேமரா மற்றும் மைக்ரோஃபோனை அணுகுவதற்கான அனுமதியைக் கேட்கிறது, மேலும் வழங்கப்பட்டால், கோரப்பட்ட தடங்களைக் கொண்ட MediaStream ஐ வழங்குகிறது.
getUserMedia() ஐப் பயன்படுத்துதல்
பயனரின் கேமரா மற்றும் மைக்ரோஃபோனை அணுக getUserMedia() ஐ எவ்வாறு பயன்படுத்துவது என்பதற்கான அடிப்படை உதாரணம் இங்கே:
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(function(stream) {
// Use the stream here.
const videoTrack = stream.getVideoTracks()[0];
const audioTrack = stream.getAudioTracks()[0];
// Example: Display the video in a video element
const videoElement = document.getElementById('myVideo');
videoElement.srcObject = stream;
videoElement.play();
})
.catch(function(err) {
console.log("An error occurred: " + err);
});
விளக்கம்:
navigator.mediaDevices.getUserMedia({ video: true, audio: true }): இது வீடியோ மற்றும் ஆடியோ உள்ளீடுகள் இரண்டிற்கும் அணுகலைக் கோருகிறது.getUserMediaக்கு அனுப்பப்பட்ட பொருள் கோரப்பட்ட மீடியா வகைகளை வரையறுக்கிறது..then(function(stream) { ... }): பயனர் அனுமதி வழங்கும்போது இது செயல்படுத்தப்படுகிறது, மேலும்MediaStreamவெற்றிகரமாகப் பெறப்படுகிறது.stream.getVideoTracks()[0]: இது ஸ்ட்ரீமில் இருந்து முதல் வீடியோ தடத்தை மீட்டெடுக்கிறது. ஒரு ஸ்ட்ரீமில் ஒரே மாதிரியான பல தடங்கள் இருக்கலாம்.stream.getAudioTracks()[0]: இது ஸ்ட்ரீமில் இருந்து முதல் ஆடியோ தடத்தை மீட்டெடுக்கிறது.videoElement.srcObject = stream: இது ஒரு வீடியோ உறுப்பின்srcObjectஐMediaStreamக்கு அமைக்கிறது, இதனால் வீடியோவைக் காண்பிக்க அனுமதிக்கிறது.videoElement.play(): வீடியோ பிளேபேக்கை தொடங்குகிறது..catch(function(err) { ... }): பயனர் அனுமதியை மறுப்பது போன்ற பிழை ஏற்பட்டால் இது செயல்படுத்தப்படுகிறது.
கட்டுப்பாடுகள்
தீர்மானம், பிரேம் வீதம் மற்றும் ஆடியோ தரம் போன்ற மீடியா தடங்களுக்கான தேவைகளை குறிப்பிட கட்டுப்பாடுகள் உங்களை அனுமதிக்கின்றன. உங்கள் பயன்பாடு அதன் குறிப்பிட்ட தேவைகளைப் பூர்த்தி செய்யும் மீடியா தரவைப் பெறுவதை உறுதி செய்வதற்கு இது முக்கியமானது. கட்டுப்பாடுகளை getUserMedia() அழைப்பில் குறிப்பிடலாம்.
navigator.mediaDevices.getUserMedia({
video: {
width: { min: 640, ideal: 1280, max: 1920 },
height: { min: 480, ideal: 720, max: 1080 },
frameRate: { ideal: 30, max: 60 }
},
audio: {
echoCancellation: { exact: true },
noiseSuppression: { exact: true }
}
})
.then(function(stream) {
// ...
})
.catch(function(err) {
console.log("An error occurred: " + err);
});
விளக்கம்:
width: { min: 640, ideal: 1280, max: 1920 }: வீடியோவின் அகலம் குறைந்தபட்சம் 640 பிக்சல்கள், சிறப்பாக 1280 பிக்சல்கள் மற்றும் 1920 பிக்சல்களை விட அதிகமாக இருக்கக்கூடாது என்பதை இது குறிக்கிறது. இந்த கட்டுப்பாடுகளை ஆதரிக்கும் கேமராவை உலாவி கண்டுபிடிக்க முயற்சிக்கும்.height: { min: 480, ideal: 720, max: 1080 }: அகலத்தைப் போலவே, இது வீடியோவின் விரும்பிய உயரத்தை வரையறுக்கிறது.frameRate: { ideal: 30, max: 60 }: இது வினாடிக்கு 30 பிரேம்கள் என்ற விகிதத்தையும், வினாடிக்கு 60 பிரேம்களை விட அதிகமாகவும் இல்லை என்று கோருகிறது.echoCancellation: { exact: true }: ஆடியோ ட்ராக்கிற்கு எக்கோ ரத்து செய்யப்பட வேண்டும் என்று இது கோருகிறது.exact: trueஎன்றால், உலாவி * கட்டாயமாக* எக்கோ ரத்து செய்வதை வழங்க வேண்டும் அல்லது கோரிக்கை தோல்வியடையும்.noiseSuppression: { exact: true }: ஆடியோ ட்ராக்கிற்கு இரைச்சல் அடக்குதல் இயக்கப்பட வேண்டும் என்று இது கோருகிறது.
எல்லா கட்டுப்பாடுகளையும் பூர்த்தி செய்ய உலாவியால் முடியாமல் போகலாம் என்பதை கவனத்தில் கொள்ள வேண்டும். பயன்படுத்தப்பட்ட உண்மையான அமைப்புகளைத் தீர்மானிக்க MediaStreamTrack இல் getSettings() ஐப் பயன்படுத்தலாம்.
மீடியாஸ்ட்ரீம் தடங்களை கையாளுதல்
MediaStreamTrack ஐப் பெற்றவுடன், ஆடியோ மற்றும் வீடியோ வெளியீட்டைக் கட்டுப்படுத்த பல்வேறு வழிகளில் அதைக் கையாளலாம்.
தடங்களை இயக்குதல் மற்றும் முடக்குதல்
enabled சொத்தைப் பயன்படுத்தி ஒரு தடத்தை இயக்கலாம் அல்லது முடக்கலாம். enabled ஐ false ஆக அமைப்பது, அதை நிறுத்தாமல் ஆடியோ தடத்தை திறம்பட முடக்கும் அல்லது வீடியோ தடத்தை முடக்கும். அதை மீண்டும் true ஆக அமைப்பது தடத்தை மீண்டும் இயக்கும்.
const videoTrack = stream.getVideoTracks()[0];
// Disable the video track
videoTrack.enabled = false;
// Enable the video track
videoTrack.enabled = true;
இது முடக்கு பொத்தான்கள் மற்றும் வீடியோ டாக்கிள்களைப் போன்ற அம்சங்களை செயல்படுத்த பயனுள்ளதாக இருக்கும்.
உருவாக்கிய பின் கட்டுப்பாடுகளைப் பயன்படுத்துதல்
ஒரு ட்ராக் உருவாக்கப்பட்ட பிறகு அதன் கட்டுப்பாடுகளை மாற்ற applyConstraints() முறையைப் பயன்படுத்தலாம். பயனர் விருப்பத்தேர்வுகள் அல்லது பிணைய நிலைமைகளின் அடிப்படையில் ஆடியோ மற்றும் வீடியோ அமைப்புகளை மாறும் வகையில் சரிசெய்ய இது உங்களை அனுமதிக்கிறது. இருப்பினும், ட்ராக் உருவாக்கப்பட்ட பிறகு சில கட்டுப்பாடுகளை மாற்ற முடியாது. applyConstraints() இன் வெற்றி அடிப்படை வன்பொருளின் திறன்களை மற்றும் ட்ராக்கின் தற்போதைய நிலையைப் பொறுத்தது.
const videoTrack = stream.getVideoTracks()[0];
videoTrack.applyConstraints({ frameRate: { ideal: 24 } })
.then(function() {
console.log("Constraints applied successfully.");
})
.catch(function(err) {
console.log("Failed to apply constraints: " + err);
});
தடங்களை நிறுத்துதல்
ஒரு தடத்தை முழுவதுமாக நிறுத்தி, அடிப்படை ஆதாரங்களை வெளியிட, stop() முறையைப் பயன்படுத்தலாம். கேமரா மற்றும் மைக்ரோஃபோன் இனி தேவையில்லாத போது அவற்றை விடுவிப்பது முக்கியம், குறிப்பாக மொபைல் சாதனங்கள் போன்ற வள-கட்டுப்படுத்தப்பட்ட சூழல்களில். ஒரு ட்ராக் நிறுத்தப்பட்டதும், அதை மறுதொடக்கம் செய்ய முடியாது. getUserMedia() ஐப் பயன்படுத்தி புதிய தடத்தைப் பெற வேண்டும்.
const videoTrack = stream.getVideoTracks()[0];
// Stop the track
videoTrack.stop();
நீங்கள் முடித்ததும் முழு MediaStream ஐயும் நிறுத்துவது நல்ல நடைமுறையாகும்:
stream.getTracks().forEach(track => track.stop());
மேம்பட்ட நுட்பங்கள்
அடிப்படை விஷயங்களைத் தாண்டி,MediaStreamTrack பொருள்களை மேலும் கையாளவும் மேம்படுத்தவும் நீங்கள் பயன்படுத்தக்கூடிய பல மேம்பட்ட நுட்பங்கள் உள்ளன.
தடங்களை குளோனிங் செய்தல்
clone() முறை அசல் நகலாக இருக்கும் ஒரு புதிய MediaStreamTrack பொருளை உருவாக்குகிறது. குளோன் செய்யப்பட்ட ட்ராக் அதே அடிப்படை ஊடக மூலத்தைப் பகிர்ந்து கொள்கிறது. ஒரே மீடியா மூலத்தை பல இடங்களில் பயன்படுத்த வேண்டியிருக்கும் போது இது பயனுள்ளதாக இருக்கும், அதாவது ஒரே வீடியோவை பல வீடியோ உறுப்புகளில் காண்பித்தல்.
const originalTrack = stream.getVideoTracks()[0];
const clonedTrack = originalTrack.clone();
// Create a new MediaStream with the cloned track
const clonedStream = new MediaStream([clonedTrack]);
// Display the cloned stream in another video element
const videoElement2 = document.getElementById('myVideo2');
videoElement2.srcObject = clonedStream;
videoElement2.play();
அசல் தடத்தை நிறுத்துவது குளோன் செய்யப்பட்ட ட்ராக்கையும் நிறுத்தும் என்பதை நினைவில் கொள்க, ஏனெனில் அவை ஒரே அடிப்படை மீடியா மூலத்தைப் பகிர்ந்து கொள்கின்றன.
ஆடியோ மற்றும் வீடியோ செயலாக்கம்
MediaStreamTrack இடைமுகம், தன்னைத்தானே, ஆடியோ அல்லது வீடியோ தரவை செயலாக்குவதற்கான நேரடி முறைகளை வழங்காது. இருப்பினும், இதை அடைய Web Audio API மற்றும் Canvas API போன்ற பிற வலை API களைப் பயன்படுத்தலாம்.
Web Audio API உடன் ஆடியோ செயலாக்கம்
MediaStreamTrack இலிருந்து ஆடியோ தரவை பகுப்பாய்வு செய்து கையாள Web Audio API ஐப் பயன்படுத்தலாம். ஆடியோ காட்சிப்படுத்தல், இரைச்சல் குறைப்பு மற்றும் ஆடியோ விளைவுகள் போன்ற பணிகளைச் செய்ய இது உங்களை அனுமதிக்கிறது.
const audioContext = new AudioContext();
const source = audioContext.createMediaStreamSource(stream);
// Create an analyser node to extract audio data
const analyser = audioContext.createAnalyser();
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);
// Connect the source to the analyser
source.connect(analyser);
analyser.connect(audioContext.destination);
function draw() {
requestAnimationFrame(draw);
// Get the frequency data
analyser.getByteFrequencyData(dataArray);
// Use the dataArray to visualize the audio
// (e.g., draw a frequency spectrum on a canvas)
console.log(dataArray);
}
draw();
விளக்கம்:
new AudioContext(): புதிய Web Audio API சூழலை உருவாக்குகிறது.audioContext.createMediaStreamSource(stream):MediaStreamஇலிருந்து ஆடியோ மூல நோடை உருவாக்குகிறது.audioContext.createAnalyser(): ஆடியோ தரவைப் பிரித்தெடுக்கப் பயன்படும் ஒரு அனலைசர் நோடை உருவாக்குகிறது.analyser.fftSize = 2048: அதிர்வெண் தொட்டிகளின் எண்ணிக்கையை தீர்மானிக்கும் ஃபாஸ்ட் ஃபோரியர் டிரான்ஸ்ஃபார்ம் (FFT) அளவை அமைக்கிறது.analyser.getByteFrequencyData(dataArray):dataArrayஐ அதிர்வெண் தரவுடன் நிரப்புகிறது.- ஆடியோ காட்சிப்படுத்தலை தொடர்ந்து புதுப்பிக்க
requestAnimationFrame()ஐப் பயன்படுத்திdraw()செயல்பாடு மீண்டும் மீண்டும் அழைக்கப்படுகிறது.
Canvas API உடன் வீடியோ செயலாக்கம்
MediaStreamTrack இலிருந்து வீடியோ பிரேம்களை கையாள Canvas API ஐப் பயன்படுத்தலாம். வடிப்பான்களைப் பயன்படுத்துதல், மேலடுக்குகளைச் சேர்ப்பது மற்றும் நிகழ்நேர வீடியோ பகுப்பாய்வைச் செய்வது போன்ற பணிகளைச் செய்ய இது உங்களை அனுமதிக்கிறது.
const videoElement = document.getElementById('myVideo');
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
function drawFrame() {
requestAnimationFrame(drawFrame);
// Draw the current video frame onto the canvas
ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);
// Manipulate the canvas data (e.g., apply a filter)
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;
for (let i = 0; i < data.length; i += 4) {
// Apply a simple grayscale filter
const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
data[i] = avg; // red
data[i + 1] = avg; // green
data[i + 2] = avg; // blue
}
// Put the modified data back onto the canvas
ctx.putImageData(imageData, 0, 0);
}
videoElement.addEventListener('play', drawFrame);
விளக்கம்:
drawFrame()செயல்பாடு கேன்வாஸை தொடர்ந்து புதுப்பிக்கrequestAnimationFrame()ஐப் பயன்படுத்தி மீண்டும் மீண்டும் அழைக்கப்படுகிறது.ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height): தற்போதைய வீடியோ சட்டத்தை கேன்வாஸில் வரைகிறது.ctx.getImageData(0, 0, canvas.width, canvas.height): கேன்வாஸில் இருந்து படத் தரவைப் பெறுகிறது.- குறியீடு பிக்சல் தரவின் மூலம் சென்று ஒரு கிரேஸ்கேல் வடிப்பானைப் பயன்படுத்துகிறது.
ctx.putImageData(imageData, 0, 0): மாற்றியமைக்கப்பட்ட படத் தரவை மீண்டும் கேன்வாஸில் வைக்கிறது.
WebRTC உடன் MediaStream தடங்களைப் பயன்படுத்துதல்
MediaStreamTrack பொருள்கள் WebRTC க்கு அடிப்படையானவை (Web Real-Time Communication), இது உலாவிகளுக்கு இடையே நேரடி ஆடியோ மற்றும் வீடியோ தகவல்தொடர்புகளை செயல்படுத்துகிறது. தொலைநிலை இணைக்கு ஆடியோ மற்றும் வீடியோ தரவை அனுப்ப WebRTC RTCPeerConnection இல் MediaStreamTrack பொருள்களைச் சேர்க்கலாம்.
const peerConnection = new RTCPeerConnection();
// Add the audio and video tracks to the peer connection
stream.getTracks().forEach(track => {
peerConnection.addTrack(track, stream);
});
// The rest of the WebRTC signaling and connection establishment process would follow here.
வீடியோ கான்பரன்சிங் பயன்பாடுகள், நேரடி ஸ்ட்ரீமிங் தளங்கள் மற்றும் பிற நிகழ்நேர தகவல்தொடர்பு கருவிகளை உருவாக்க இது உங்களை அனுமதிக்கிறது.
உலாவி இணக்கத்தன்மை
MediaStreamTrack API Chrome, Firefox, Safari மற்றும் Edge உள்ளிட்ட நவீன உலாவிகளால் பரவலாக ஆதரிக்கப்படுகிறது. இருப்பினும், MDN வலை ஆவணங்கள் போன்ற ஆதாரங்களில் சமீபத்திய உலாவி இணக்கத்தன்மை தகவல்களைச் சரிபார்ப்பது எப்போதும் நல்லது.
சிறந்த நடைமுறைகள்
- அனுமதிகளை கவனமாக கையாளவும்: கேமரா மற்றும் மைக்ரோஃபோன் அணுகலுக்கான பயனர் அனுமதிகளை எப்போதும் கருணையுடன் கையாளவும். இந்த சாதனங்களுக்கான அணுகல் உங்கள் பயன்பாட்டிற்கு ஏன் தேவை என்பதைப் பற்றிய தெளிவான விளக்கங்களை வழங்கவும்.
- தேவையில்லாதபோது தடங்களை நிறுத்தவும்: தடங்கள் இனி பயன்படுத்தப்படாமல் இருக்கும்போது அவற்றை நிறுத்துவதன் மூலம் கேமரா மற்றும் மைக்ரோஃபோன் ஆதாரங்களை விடுவிக்கவும்.
- கட்டுப்பாடுகளை மேம்படுத்தவும்: உங்கள் பயன்பாட்டிற்கான உகந்த மீடியா அமைப்புகளைக் கோர கட்டுப்பாடுகளைப் பயன்படுத்தவும். அதிகப்படியான உயர் தெளிவுத்திறன் அல்லது பிரேம் வீதங்கள் தேவையில்லை என்றால் அவற்றைக் கோருவதைத் தவிர்க்கவும்.
- ட்ராக் நிலையை கண்காணிக்கவும்: ட்ராக் நிலையில் ஏற்படும் மாற்றங்களுக்கு பதிலளிக்க
endedமற்றும்muteபோன்ற நிகழ்வுகளைக் கேட்கவும். - வெவ்வேறு சாதனங்களில் சோதிக்கவும்: இணக்கத்தன்மையை உறுதிப்படுத்த உங்கள் பயன்பாட்டை பல்வேறு சாதனங்கள் மற்றும் உலாவிகளில் சோதிக்கவும்.
- அணுகல்தன்மையைக் கவனியுங்கள்: குறைபாடுகள் உள்ள பயனர்களுக்கு அணுகக்கூடிய வகையில் உங்கள் பயன்பாட்டை வடிவமைக்கவும். மாற்று உள்ளீட்டு முறைகளை வழங்கவும் மற்றும் ஆடியோ மற்றும் வீடியோ வெளியீடு தெளிவாகவும் புரிந்துகொள்ளக்கூடியதாகவும் இருப்பதை உறுதி செய்யவும்.
முடிவுரை
ஊடகங்கள் நிறைந்த வலை பயன்பாடுகளை உருவாக்குவதற்கான ஒரு சக்திவாய்ந்த கருவி MediaStreamTrack இடைமுகம். ஊடக தடங்களை எவ்வாறு உருவாக்குவது, கையாளுவது மற்றும் நிர்வகிப்பது என்பதைப் புரிந்துகொள்வதன் மூலம், உங்கள் பயனர்களுக்கு ஈடுபாடு மற்றும் ஊடாடும் அனுபவங்களை உருவாக்க முடியும். இந்த விரிவான வழிகாட்டி getUserMedia() ஐப் பயன்படுத்தி தடங்களைப் பெறுவது முதல் ஆடியோ மற்றும் வீடியோ செயலாக்கம் போன்ற மேம்பட்ட நுட்பங்கள் வரை MediaStreamTrack நிர்வாகத்தின் அத்தியாவசிய அம்சங்களை உள்ளடக்கியது. மீடியா ஸ்ட்ரீம்களுடன் பணிபுரியும் போது பயனர் தனியுரிமைக்கு முன்னுரிமை அளிக்கவும், செயல்திறனை மேம்படுத்தவும் நினைவில் கொள்ளுங்கள். WebRTC மற்றும் தொடர்புடைய தொழில்நுட்பங்களின் மேலும் ஆய்வு, வலை மேம்பாட்டின் இந்த அற்புதமான துறையில் உங்கள் திறன்களை கணிசமாக அதிகரிக்கும்.